﻿#pragma once
#include "XyNet/Common/FileSystem.h"

namespace XyNet
{
	struct XYNET_API System
	{
		/// 获取数据路径
		static const FileSystem::Path& getDataPath();
		/// 设置数据路径
		static void setDataPath(const FileSystem::Path& path);

		/// 获取临时路径
		static const FileSystem::Path& getTempPath();
		/// 设置临时路径
		static void setTempPath(const FileSystem::Path& path);

		/// 获取配置目录
		static FileSystem::Path getConfigPath();
		/// 获取日志目录
		static FileSystem::Path getLogPath();
		/// 获取资源目录
		static FileSystem::Path getResourcePath();

		/// 控制台输出
		static void consoleWriteLine(const string& message);
		/// 设置控制台输出事件
		static void setConsoleWriteLineHandler(const function<void(const string&)>& handler);

		///// 获取系统区域
		//static locale getSystemLocale();

		/// 弹出消息框
		static void popupMessageBox(const string& message, const string& caption = "");

	private:
		/// 控制台写入行处理器
		static function<void(const string&)> _consoleWriteLineHandler;

		/// 数据路径
		static FileSystem::Path _dataPath;
		/// 临时路径
		static FileSystem::Path _tempPath;
	};
}

//////////////////////////////////////////////////////////////////////////

namespace XyNet
{
	extern "C"
	{
		/// 设置数据路径
		XYNET_API void SystemSetDataPath(string* path);
		/// 设置临时路径
		XYNET_API void SystemSetTempPath(string* path);
	}
}